#include "tim4.h"
#include "sys.h"
#include "led.h"

/* 以下是一个定时器,到时间将tim2_count + 1 */
volatile uint32_t tim4_count = 0;

void TIM4_IRQHandler()
{
    tim4_inc_and_clear_update_flag();
    watch(WatchUpdate);
}

/* 定时器初始化 */
void tim4_init(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // 时钟使能

    // 定时器TIM4初始化
    TIM_TimeBaseStructure.TIM_Period = TIM4_PERIOD_US - 1;                          // 设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler = clocks.PCLK1_Frequency * 2 / 1000000 - 1; // 预分频值，决定计时器的计数器多久跳一位，1us跳一位。
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                         // 设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;                   // TIM向上计数模式
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);                                 // 根据指定的参数初始化TIMx的时间基数单位

    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); // 使能指定的TIM3中断,允许更新中断

    // 中断优先级NVIC设置
    NVIC_SetPriority(TIM4_IRQn, 7); // 最低级优先级
    NVIC_EnableIRQ(TIM4_IRQn);      // 使能中断
    // TIM_Cmd(TIM4, ENABLE);          // 使能TIMx
}